package vista;

import interfaces.IServicioProducto;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;

import dto.DTOSKF;
import excepciones.Excepcion;

public class ABMSKF extends Ventana
{

	private static final long serialVersionUID = 1L;
	private Accion accion;
	private String codigo;
	private JButton btn_cancelar;
	private JButton btn_guardar;
	private JTextField txt_codigo;
	private JLabel lbl_codigo;
	private JTextField txt_medida;
	private JLabel lbl_medida;
	private JTextField txt_tipo;
	private JLabel lbl_tipo;
	
	public ABMSKF(Principal Parent, Accion accion, String codigo)
	{
		super(Parent);
		this.accion = accion;
		this.codigo = codigo;
		inicializar();
		cargarDatos();
	}
	
	private void inicializar()
	{
		getContentPane().setLayout(null);
		setSize(350, 160);
	
		// Elementos del formulario
		
		lbl_codigo = new JLabel();
		getContentPane().add(lbl_codigo);
		lbl_codigo.setText("Codigo");
		lbl_codigo.setFont(new java.awt.Font("Tahoma", 0, 10));
		lbl_codigo.setBounds(14, 15, 63, 28);
	
		txt_codigo = new JTextField();
		getContentPane().add(txt_codigo);
		txt_codigo.setBounds(84, 20, 245, 21);
		
		lbl_medida = new JLabel();
		getContentPane().add(lbl_medida);
		lbl_medida.setText("Medida");
		lbl_medida.setFont(new java.awt.Font("Tahoma", 0, 10));
		lbl_medida.setBounds(14, 40, 63, 28);
	
		txt_medida = new JTextField();
		getContentPane().add(txt_medida);
		txt_medida.setBounds(84, 45, 245, 21);
		
		lbl_tipo = new JLabel();
		getContentPane().add(lbl_tipo);
		lbl_tipo.setText("Tipo");
		lbl_tipo.setFont(new java.awt.Font("Tahoma", 0, 10));
		lbl_tipo.setBounds(14, 65, 63, 28);
	
		txt_tipo = new JTextField();
		getContentPane().add(txt_tipo);
		txt_tipo.setBounds(84, 70, 245, 21);
	
		
		JSeparator jSeparator1 = new JSeparator();
		jSeparator1.setBounds(0, 95, 350, 14);
		getContentPane().add(jSeparator1);
		
        // Boton Guardar
		btn_guardar = new JButton();
		getContentPane().add(btn_guardar);
		btn_guardar.setText("Guardar");
		btn_guardar.setFont(new java.awt.Font("Tahoma", 0, 10));
		btn_guardar.setBounds(172, 100, 77, 21);
		btn_guardar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				guardar();
			}
		});
	
		// Boton Cancelar
		btn_cancelar = new JButton();
		getContentPane().add(btn_cancelar);
		btn_cancelar.setText("Cancelar");
		btn_cancelar.setFont(new java.awt.Font("Tahoma", 0, 10));
		btn_cancelar.setBounds(258, 100, 77, 21);
		btn_cancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				cerrar();
			}
		});
		
		// Seteo las visibilidades
		switch (accion)
		{
			case Nuevo:
				setTitle("Nuevo SKF");
				txt_codigo.setEditable(true);
				break;
			case Editar:
				setTitle("Editar SKF");
				txt_codigo.setEditable(false);
				break;
			case Eliminar:
				setTitle("Eliminar SKF");
				txt_codigo.setEditable(false);
				txt_medida.setEditable(false);
				txt_tipo.setEditable(false);
				break;
			case Ver:
				setTitle("Eliminar SKF");
				txt_codigo.setEditable(false);
				txt_medida.setEditable(false);
				txt_tipo.setEditable(false);
				btn_guardar.setVisible(false);
				break;
		}
	}

	private void cargarDatos()
	{
		try
		{
			if (!codigo.equals(""))
			{
				DTOSKF entidad = parent.getServicioProducto().obtenerSKF(codigo);
				if (entidad != null){
					txt_codigo.setText(entidad.getCodigo());
					txt_medida.setText(entidad.getMedida());
					txt_tipo.setText(entidad.getTipo());
				}
			}

		}
		catch (Excepcion e)
		{
			JOptionPane.showMessageDialog(null, e.getMessage());
		}
		catch (RemoteException e)
		{
			JOptionPane.showMessageDialog(null, "Se ha producido un error: " + e.getMessage());
		}
	}
	
	private void guardar()
	{
		try
		{
			IServicioProducto srvProducto = parent.getServicioProducto();
		
			switch (accion)
			{
				case Nuevo:
					srvProducto.altaSKF(txt_codigo.getText(), txt_medida.getText(), txt_tipo.getText());
					break;
				case Editar:
					srvProducto.modificarSKF(codigo, txt_medida.getText(), txt_tipo.getText());
					break;
				case Eliminar:
					srvProducto.eliminarSKF(codigo);
					break;
			}
			updateObservers();
			cancelar();
		}
		catch (Excepcion e)
		{
			JOptionPane.showMessageDialog(null, e.getMessage());
		}
		catch (RemoteException e)
		{
			JOptionPane.showMessageDialog(null, "Se ha producido un error: " + e.getMessage());
		}
	}
	
	public void cancelar()
	{
		super.cerrar();
	}
}
